﻿namespace Jim.Http;  

/// <summary>
/// 请求对象
/// </summary>
public class HttpItem
{
    /// <summary>
    /// 基础地址    
    /// BaseAddress 为 https://api.example.com/;
    /// url为foo/bar
    /// 实际访问地址为https://api.example.com/foo/bar。
    /// </summary>
    public string BaseAddress { get; set; }
    /// <summary>
    /// 请求URL必须填写
    /// </summary>
    public string URL { get; set; }
    /// <summary>
    /// 设置Host的标头信息
    /// </summary>
    public string Host { get; set; }
    /// <summary>
    /// 请求方式  ,默认为HttpMethod.Get
    /// </summary>
    public HttpMethod Method { get; set; } = HttpMethod.Get;
    /// <summary>
    /// 请求返回类型默认 text/html
    /// </summary>
    public string ContentType { get; set; } = "text/html";
    /// <summary>
    /// 授权
    /// </summary>
    public string AccessToken { get; set; }
    /// <summary>
    /// 请求标头值 默认为text/html
    /// 可选application/json
    /// </summary>
    public string Accept { get; set; }
    /// <summary>
    /// 超时时间,毫秒
    /// </summary>
    public int Timeout { get; set; } = 10000;
    /// <summary>
    /// 获取或设置一个值，该值指示是否与 Internet 资源建立持久性连接默认为true。
    /// </summary>
    public bool KeepAlive { get; set; } = true;
    /// <summary>
    /// 客户端访问信息默认Mozilla/5.0 (compatible; MSI9.0; Windows NT 6.1; Trident/5.0)
    /// </summary>
    public string UserAgent { get; set; } = "Mozilla/5.0 (compatible; MSI9.0; Windows NT 6.1; Trident/5.0)";

    /// <summary>
    /// 来源地址，上次访问地址
    /// </summary>
    public string Referer { get; set; }

    public bool IsGzip { get; set; } = false;
    /// <summary>
    /// 支持跳转页面，查询结果将是跳转后的页面，默认是不跳转
    /// </summary>
    public bool Allowautoredirect { get; set; } = false;
    /// <summary>
    /// 设置请求将跟随的重定向的最大数目
    /// </summary>
    public int MaxAutomaticRedirections { get; set; }
    /// <summary>
    /// 最大连接数
    /// </summary>
    public int MaxConnectionsPerServer { get; set; } = 1024;
    /// <summary>
    /// 返回数据编码默认为NUll,可以自动识别,一般为utf-8,gbk,gb2312
    /// </summary>
    public Encoding Encoding { get; set; } = Encoding.UTF8;
    /// <summary>
    /// Post的数据类型
    /// </summary>
    public PostDataType PostDataType { get; set; } = PostDataType.String;

    /// <summary>
    /// Post请求时要发送的字符串Post数据
    /// </summary>
    public string Postdata { get; set; } = "";
    /// <summary>
    /// Post请求时要发送的Byte类型的Post数据
    /// </summary>
    public byte[] PostdataByte { get; set; }
    /// <summary>
    /// Post请求时要发送的Byte类型的Post数据
    /// </summary>
    public Dictionary<string, string> PostdataDic { get; set; }

    public bool UseCookies { get; } = true;

    /// <summary>
    /// 是否自动将Cookie自动更新为请求所获取的新Cookie值  默认为False
    /// </summary>
    public bool IsUpdateCookie { get; set; } = false;

    /// <summary>
    /// Cookie对象的集合容器 模式Cookie，可容纳N个CookieCollection对象
    /// </summary>
    public CookieContainer CookieContainer { get; set; } = new CookieContainer();

    public ResultType ResultType { get; set; } = ResultType.String;
    /// <summary>
    /// header对象
    /// </summary>
    public Dictionary<string,string> Header { get; set; } = new ();

    /// <summary>
    ///  获取或设置一个 System.Boolean 值，该值确定是否使用 100-Continu行为。如果 POST 请求需要 100-Continu响应，则为 true；否则为 false。默认值为 true。
    /// </summary>
    public bool Expect100Continue { get; set; } = false;

    /// <summary>
    /// 当出现“请求被中止: 未能创建 SSL/TLS 安全通道”时需要配置此属性 
    /// </summary>
    public SecurityProtocolType SecurityProtocol { get; set; }

    public bool IsReset { get; set; } = false;

    /// <summary>
    /// 返回最大值
    /// </summary>
    public long MaxResponseContentBufferSize { get; set; }


    /// <summary>
    ///   获取或设置用于请求的 HTTP 版本。返回结果:用于请求的 HTTP 版本。默认为 System.Net.HttpVersion.Version11。
    /// </summary>
    public Version DefaultRequestVersion { get; set; } = new Version(1, 1);

    /// <summary>
    /// HttpVersionPolicy.RequestVersionExact：只使用指定的版本号。
    /// HttpVersionPolicy.RequestVersionOrHigher：使用指定的版本号或更高版本,默认值。
    /// HttpVersionPolicy.RequestVersionOrLower：使用指定的版本号或更低版本。
    /// 需要注意的是，如果配置了 HttpRequestMessage.Version 属性，它将覆盖 HttpClient 的 DefaultVersionPolic属性设置。因此，在使用 DefaultVersionPolic时，请确保不会覆盖请求消息的版本设置。
    /// 请注意，HTTP 请求版本支持取决于客户端库和服务器的兼容性。通常情况下，HTTP/1.1 和 HTTP/2 是较为通用的版本，而 HTTP/3 正逐渐在实验中，尚未广泛普及。
    /// 在设置 DefaultVersionPolic时，请确保目标服务器支持所指定的版本策略，并考虑到客户端和服务器之间的兼容性，以避免出现意料之外的错误。
    /// </summary>
    public HttpVersionPolicy DefaultVersionPolicy { get; set; } = HttpVersionPolicy.RequestVersionOrHigher;


}
